Jackson হলো Spring Boot-এ ডিফল্ট JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন লাইব্রেরি। এটি Spring Boot-এর মাধ্যমে JSON ডেটা প্রক্রিয়াকরণ সহজ করে। Spring Boot অটোমেটিকভাবে Jackson-কে কনফিগার করে RESTful API-তে ইনপুট এবং আউটপুট JSON ডেটার জন্য।
Spring Boot এবং Jackson Integration কেন গুরুত্বপূর্ণ?
- JSON হ্যান্ডলিং সহজ করা: Spring Boot-এর মাধ্যমে Jackson স্বয়ংক্রিয়ভাবে ইনপুট (JSON থেকে Java) এবং আউটপুট (Java থেকে JSON) পরিচালনা করে।
- Custom Serialization/Deserialization: JSON ডেটা কাস্টমাইজ করার জন্য সহজ ইন্টিগ্রেশন।
- Configuration Automation: Spring Boot অটোমেটিক Jackson কনফিগারেশন সরবরাহ করে।
- REST API Development: JSON হলো RESTful API-এর প্রধান ডেটা ফরম্যাট, যা Jackson সহজ করে।
- ডেটা ভ্যালিডেশন: Spring Boot Bean Validation এবং Jackson একত্রে JSON ডেটার যাচাই নিশ্চিত করে।
Spring Boot-এ Jackson ব্যবহার করার ধাপসমূহ
১. Maven ডিপেন্ডেন্সি (অত্যাবশ্যক নয়)
Spring Boot Starter Web ডিপেন্ডেন্সি ব্যবহার করলে Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে। তবুও, যদি প্রয়োজন হয়, নিম্নলিখিত ডিপেন্ডেন্সি যুক্ত করুন:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
২. REST Controller তৈরি করুন
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public User createUser(@RequestBody User user) {
// JSON থেকে Java Object (Deserialization)
System.out.println("Received User: " + user.getName() + ", Age: " + user.getAge());
return user; // Java Object থেকে JSON (Serialization)
}
}
৩. Model Class তৈরি করুন
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("user_name") // JSON ফিল্ডের নাম কাস্টমাইজ করা
private String name;
private int age;
// Getters এবং Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
৪. Request এবং Response JSON উদাহরণ
Request JSON:
{
"user_name": "John Doe",
"age": 25
}
Response JSON:
{
"user_name": "John Doe",
"age": 25
}
Spring Boot-এ Custom Serialization এবং Deserialization
Custom Serializer
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class CustomUserSerializer extends JsonSerializer<User> {
@Override
public void serialize(User user, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField("name", user.getName().toUpperCase());
gen.writeNumberField("age", user.getAge());
gen.writeEndObject();
}
}
Custom Deserializer
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
public class CustomUserDeserializer extends JsonDeserializer<User> {
@Override
public User deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
User user = new User();
user.setName(p.readValueAsTree().get("name").asText().toLowerCase());
user.setAge(p.readValueAsTree().get("age").asInt());
return user;
}
}
ObjectMapper Configuration
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(User.class, new CustomUserSerializer());
module.addDeserializer(User.class, new CustomUserDeserializer());
objectMapper.registerModule(module);
return objectMapper;
}
}
Spring Boot-এ Common Jackson Annotations
@JsonProperty: ফিল্ডের JSON নাম কাস্টমাইজ করতে।@JsonIgnore: একটি ফিল্ড JSON সিরিয়ালাইজেশনে অন্তর্ভুক্ত না করতে।@JsonInclude: শর্তসাপেক্ষে ফিল্ড অন্তর্ভুক্ত করতে।@JsonInclude(JsonInclude.Include.NON_NULL) private String address;@JsonFormat: ডেটা ফরম্যাট কাস্টমাইজ করতে (যেমন, তারিখ)।@JsonFormat(pattern = "yyyy-MM-dd") private LocalDate birthDate;@JsonCreatorএবং@JsonValue: Custom deserialization এবং serialization এর জন্য।
Spring Boot এবং Jackson Integration এর উপকারিতা
- সহজ JSON হ্যান্ডলিং: ইনপুট এবং আউটপুট JSON স্বয়ংক্রিয়ভাবে প্রক্রিয়াকরণ।
- ডেটা কাস্টমাইজেশন: Custom Serializer এবং Deserializer দিয়ে JSON ডেটা কাস্টমাইজ করা যায়।
- অ্যানোটেশন সাপোর্ট: Bean Validation এবং Jackson এর অ্যানোটেশন ব্যবহার করে ডেটা যাচাই এবং প্রক্রিয়াকরণ।
- RESTful API ডেভেলপমেন্ট: Spring Boot-এর মাধ্যমে RESTful API ডেভেলপমেন্ট আরো সহজ হয়।
- ডেটা ভ্যালিডেশন: JSON ইনপুট ভ্যালিডেশন নিশ্চিত করতে Bean Validation এর সাথে Integration।
Spring Boot-এর সাথে Jackson একটি শক্তিশালী এবং কার্যকর সমাধান যা JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া সহজ করে। এটি RESTful API ডেভেলপমেন্টে অত্যন্ত উপযোগী এবং ডেটা ইন্টিগ্রিটি ও নিরাপত্তা নিশ্চিত করতে বিশেষ ভূমিকা পালন করে।
Read more